<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>JS错误处理</title>
</head>
<body>
    <script>
        //引用错误
        try{//尝试
            //正常代码 自动报错
            // console.log('会执行的~~');// 报错前面的代码是可以正常执行的
            // fn();// 出错了, 抛出一个错误对象 new ReferenceError 实例对象
            // console.log(123); //try 里报错之后的代码不会执行.

            //手动的抛出错误   throw 抛出, 可以抛出任意类型的数据
            throw new Error('出问题啦~~~, 端午节不放假~~');
            // throw new ReferenceError('李斌胳膊上有个印儿~~~');
            // throw '印的是啥呢~~ 我也不知道~~';

        }catch(e){ //catch 抓住 捕获
            console.dir(e);// e 就是 try 所抛出的内容   message 属性, stack 属性
        }

        console.log('太凉快了~~~');

        /**
         * 语法固定 try...catch   try 尝试的意思  catch 捕获  作用: 统一处理错误
         * 1. try catch捕获到错误之后, 后续代码可以继续执行
         * 2. catch 可以将错误信息捕获到. e 是大多数一个对象, 有 message 和 stack 两个属性
         *                                                   错误信息    错误位置
         * 3. 抛出错误之后, 在后续的 try 里面的代码不会执行
         * 4. try 不能捕获语法错误. 其他类型错误可以捕获. 
         * 5. 允许使用 throw 手动的抛出错误 
         * 6. 抛出任意类型的数据(很少用)
         */
    </script>
</body>
</html>